package worktools.utils;

import com.google.gson.Gson;
import worktools.entity.RecordAddEntity;
import worktools.entity.RecordListEntity;
import worktools.entity.RecordUpdDNSEntity;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by 逍遥的熊 on 2017/3/27.
 */
public class DNSUtils {
    private static Map<String,String> pubparams = new HashMap<String, String>();

    private static Map<String,String> pubheads = new HashMap<String, String>();

    private static Gson gson = new Gson();

    static {
        //公共参数
        pubparams.put("login_token","28118,6183d46216f49f313e382f153cc2c949");
        pubparams.put("format","json");
        pubparams.put("lang","cn");
        pubparams.put("error_on_empty","no");
        pubparams.put("user_id","");

        //公共head
        pubheads.put("User-Agent","BEAR WORKTOOL/1.0.0 (10675013@qq.com)");
    }

    /**
     * 添加解析记录
     * @param domainId 域名ID, 必选
     * @param domain    域名
     * @param sub_domain  主机记录, 如 www，可选，如果不传，默认为 @
     * @param record_type  记录类型，通过API记录类型获得，大写英文，比如：A, 必选
     * @param record_line  记录线路，通过API记录线路获得，中文，比如：默认
     * @param record_line_id  线路的ID，通过API记录线路获得，英文字符串，比如：‘10=1’ 【record_line 和 record_line_id 二者传其一即可，系统优先取 record_line_id】
     * @param value  记录值, 如 IP:200.200.200.200, CNAME: cname.dnspod.com., MX: mail.dnspod.com., 必选
     * @param mx  {1-20} MX优先级, 当记录类型是 MX 时有效，范围1-20, MX记录必选
     * @param ttl  {1-604800} TTL，范围1-604800，不同等级域名最小值不同, 可选
     * @param status  [“enable”, “disable”]，记录初始状态，默认为”enable”，如果传入”disable”，解析不会生效，也不会验证负载均衡的限制，可选
     * @param weight  权重信息，0到100的整数，可选。仅企业 VIP 域名可用，0 表示关闭，留空或者不传该参数，表示不设置权重信息
     * @return
     */
    public static RecordAddEntity addRecord(String domainId,String domain,String sub_domain,String record_type,String record_line,String record_line_id,String value,String mx,String ttl,String status,String weight){
        String listUrl = "https://dnsapi.cn/Record.Create";
        Map<String,String> parammap = new HashMap<String, String>();
        parammap.put("domain_id",domainId);
        parammap.put("domain",domain);
        parammap.put("sub_domain",sub_domain);
        parammap.put("record_type",record_type);
        parammap.put("record_line",record_line);
        parammap.put("record_line_id",record_line_id);
        parammap.put("value",value);
        parammap.put("mx",mx);
        parammap.put("ttl",ttl);
        parammap.put("status",status);
        parammap.put("weight",weight);

        parammap.putAll(pubparams);

        Map<String,Object> res = NetUtils.post(listUrl,parammap,pubheads);
        String resinfo = res.get(NetUtils.convert.info).toString();

        RecordAddEntity recordAddEntity = gson.fromJson(resinfo, RecordAddEntity.class);

        System.out.println(recordAddEntity.getStatus().getMessage());
        return recordAddEntity;
    }

    /**
     * 获取记录列表
     * @param domain  域名
     * @param sub_domain  子域名，如果指定则只返回此子域名的记录，可选
     * @param keyword  搜索的关键字，如果指定则只返回符合该关键字的记录，可选
     * @param offset  记录开始的偏移，第一条记录为 0，依次类推，可选
     * @param length  共要获取的记录的数量，比如获取20条，则为20，可选
     * @return
     */
    public static RecordListEntity getList(String domain, String sub_domain, String keyword, int offset, int length){
        String listUrl = "https://dnsapi.cn/Record.List";
        Map<String,String> parammap = new HashMap<String, String>();
        parammap.put("domain",domain);
        parammap.put("sub_domain",sub_domain);
        parammap.put("keyword",keyword);
        parammap.put("offset",offset+"");
        parammap.put("length",length+"");

        parammap.putAll(pubparams);

        Map<String,Object> res = NetUtils.post(listUrl,parammap,pubheads);
        String resinfo = res.get(NetUtils.convert.info).toString();

        RecordListEntity recordListEntity = gson.fromJson(resinfo, RecordListEntity.class);

        System.out.println(recordListEntity.getStatus().getMessage());
        return recordListEntity;
    }


    /**
     * 更新动态DNS记录
     * @param domain 域名
     * @param record_id 记录ID，必选
     * @param sub_domain 主机记录，如 www
     * @param record_line 记录线路，通过API记录线路获得，中文，比如：默认，必选
     * @param record_line_id 线路的ID，通过API记录线路获得，英文字符串，比如：‘10=1’ 【record_line 和 record_line_id 二者传其一即可，系统优先取 record_line_id】
     * @param value IP地址，例如：6.6.6.6，可选
     * @return
     */
    public static RecordUpdDNSEntity updDNS(String domain,String record_id,String sub_domain,String record_line,String record_line_id,String value){
        String listUrl = "https://dnsapi.cn/Record.Ddns";
        Map<String,String> parammap = new HashMap<String, String>();
        parammap.put("domain",domain);
        parammap.put("sub_domain",sub_domain);
        parammap.put("record_id",record_id);
        parammap.put("record_line",record_line);
        parammap.put("record_line_id",record_line_id);
        parammap.put("value",value);

        parammap.putAll(pubparams);

        Map<String,Object> res = NetUtils.post(listUrl,parammap,pubheads);
        String resinfo = res.get(NetUtils.convert.info).toString();

        RecordUpdDNSEntity recordUpdDNSEntity = gson.fromJson(resinfo, RecordUpdDNSEntity.class);

        System.out.println(recordUpdDNSEntity.getStatus().getMessage());
        return recordUpdDNSEntity;
    }
}
